home *** CD-ROM | disk | FTP | other *** search
/ Workbench Design / WB Collection.iso / workbench werkzeuge / memory & system tools / copymemquicker / source / cm010.asm < prev    next >
Assembly Source File  |  1996-04-07  |  2KB  |  143 lines

  1.     xdef    Start10
  2.     xdef    Quicker10
  3.     xdef    Quickest10
  4.     xdef    CopyLen10
  5. Quicker10    equ    Quicker-Start10
  6. Quickest10    equ    Quickest-Start10
  7. CopyLen10    equ    Stop10-Start10
  8.  
  9. Start10
  10.     dc.l    '*Art'
  11. Quicker
  12.     moveq    #12,d1
  13.     cmp.l    d1,d0
  14.     bcs.s    tinycpy
  15.     move.w    a0,d1
  16.     lsr.b    #1,d1
  17.     bcc.s    evena0
  18.     move.b    (a0)+,(a1)+
  19.     subq.l    #1,d0
  20. evena0    move.w    a1,d1
  21.     lsr.b    #1,d1
  22.     bcc.s    evenquicker
  23.  
  24.     moveq    #36*3,d1
  25.     cmp.l    d1,d0
  26.     bcs.s    tinycpy
  27.  
  28. * This is tricky!  They said it couldn't be done...
  29.  
  30. unevcpy    movem.l    a2-a4/d2-d7,-(sp)
  31.     moveq    #32,d1
  32.     move.w    d1,a3
  33.     moveq    #36,d1
  34.     move.w    d1,a4
  35.     sub.l    d1,d0
  36.     movea.l    d0,a2
  37. uloop    movem.l    (a0)+,d0-d7
  38.     rol.l    #8,d0
  39.     rol.l    #8,d1
  40.     rol.l    #8,d2
  41.     rol.l    #8,d3
  42.     rol.l    #8,d4
  43.     rol.l    #8,d5
  44.     rol.l    #8,d6
  45.     rol.l    #8,d7
  46.     move.b    d0,(a1)+
  47.     move.b    d1,d0
  48.     move.b    d2,d1
  49.     move.b    d3,d2
  50.     move.b    d4,d3
  51.     move.b    d5,d4
  52.     move.b    d6,d5
  53.     move.b    d7,d6
  54.     move.b    (a0)+,d7
  55.     movem.l    d0-d7,(a1)
  56.     adda.w    a3,a1
  57.     move.b    (a0)+,(a1)+
  58.     move.b    (a0)+,(a1)+
  59.     move.b    (a0)+,(a1)+
  60.     suba.w    a4,a2
  61.     move.l    a2,d0
  62.     bpl.s    uloop
  63.     add.w    a4,d0
  64.     movem.l    (sp)+,a2-a4/d2-d7
  65.     subq.b    #1,d0
  66.     bcs.s    tdone
  67.  
  68. tloop    move.b    (a0)+,(a1)+
  69. tinycpy    dbf    d0,tloop
  70. tdone    rts
  71.  
  72. evenquicker
  73.     cmpi.l    #44*8,d0
  74.     bcs.s    smlmov
  75.     moveq    #44,d1
  76.     sub.l    d1,d0
  77.     movem.l    d2-d7/a2-a6,-(sp)
  78. bigmov    movem.l    (a0)+,d2-d7/a2-a6
  79.     movem.l    d2-d7/a2-a6,(a1)
  80.     adda.w    d1,a1
  81.     sub.l    d1,d0
  82.     bcc.s    bigmov
  83.     add.w    d1,d0
  84.     movem.l    (sp)+,d2-d7/a2-a6
  85.  
  86. smlmov    lsr.w    #1,d0
  87.     beq.s    even01
  88.     bcs.s    sm13
  89.     lsr.w    #1,d0
  90.     beq.s    even2
  91.     bcs.s    sm2
  92. sm0    subq.w    #1,d0
  93. loop0    move.l    (a0)+,(a1)+
  94.     dbf    d0,loop0
  95. even0    rts
  96.  
  97. sm2    subq.w    #1,d0
  98. loop2    move.l    (a0)+,(a1)+
  99.     dbf    d0,loop2
  100. even2    move.w    (a0),(a1)
  101.     rts
  102.  
  103. sm13    lsr.w    #1,d0
  104.     beq.s    even3
  105.     bcs.s    sm3
  106. sm1    subq.w    #1,d0
  107. loop1    move.l    (a0)+,(a1)+
  108.     dbf    d0,loop1
  109. even1    move.b    (a0),(a1)
  110.     rts
  111.  
  112. sm3    subq.w    #1,d0
  113. loop3    move.l    (a0)+,(a1)+
  114.     dbf    d0,loop3
  115. even3    move.w    (a0)+,(a1)+
  116.     move.b    (a0),(a1)
  117.     rts
  118.  
  119. even01    bcs.s    even1
  120.     rts
  121.  
  122.     dc.l    '*Art'
  123. Quickest
  124.     cmpi.l    #44*8,d0
  125.     bcs.s    smlmovQ
  126.     moveq    #44,d1
  127.     sub.l    d1,d0
  128.     movem.l    d2-d7/a2-a6,-(sp)
  129. bigmovQ    movem.l    (a0)+,d2-d7/a2-a6
  130.     movem.l    d2-d7/a2-a6,(a1)
  131.     adda.w    d1,a1
  132.     sub.l    d1,d0
  133.     bcc.s    bigmovQ
  134.     add.w    d1,d0
  135.     movem.l    (sp)+,d2-d7/a2-a6
  136. smlmovQ    lsr.w    #2,d0
  137.     beq.s    done
  138.     subq.w    #1,d0
  139. qloop    move.l    (a0)+,(a1)+
  140.     dbf    d0,qloop
  141. done    rts
  142. Stop10
  143.